package com.neusoft.crm.mapper;

import com.neusoft.crm.po.ClientInfo;
import com.neusoft.crm.po.ClientReprieveLose;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 客户流失管理数据层
 *
 * @author lanan1207
 */
@Mapper
public interface ClientReprieveLoseMapper {

    /**
     * 显示暂缓流失客户列表
     *
     * @param clientInfo 暂缓流失客户，state=2
     * @return 暂缓流失客户列表
     */
    List<ClientInfo> selectDeferredLossCustomerList(ClientInfo clientInfo);

    /**
     * 编辑暂缓流失措施
     *
     * @param clientReprieveLose 要编辑的暂缓流失项
     * @return 暂缓流失项
     */
    int updateDeferredLossItemList(List<ClientReprieveLose> clientReprieveLose);

    /**
     * 显示暂缓流失客户详情
     *
     * @param clientInfo 暂缓流失客户，state=2
     * @return 暂缓流失客户详情
     */
    List<ClientInfo> selectLostCustomerDetails(ClientInfo clientInfo);

    /**
     * 确认客户流失
     *
     * @param clientInfo 要确认流失的客户，state=3
     * @return 受影响的行数
     */
    @Update("update clientinfo set clientState=3,clientLoseDate=#{clientLoseDate},clientLoseReason = #{clientLoseReason} where clientCode = #{clientCode}")
    int confirmLostClient(ClientInfo clientInfo);

    /**
     * 挽救成功的客户
     *
     * @param clientInfo 挽救成功的客户信息，state=1
     * @return 受影响的行数
     */
    @Update("update clientinfo set clientState =1 where clientCode=#{clientCode}")
    int regainLostClient(ClientInfo clientInfo);

    /**
     * 查询暂缓流失客户信息
     *
     * @param clientInfo 暂缓流失客户信息
     * @return 暂缓流失客户详情
     */
    List<ClientInfo> selectLostClient(ClientInfo clientInfo);

    /**
     * 查询客户id对应的客户暂缓流失项列表
     *
     * @param clientInfo 需要查询的客户
     * @return 暂缓流失项列表
     */
    List<ClientReprieveLose> selectDeferredLossItemById(ClientInfo clientInfo);

    /**
     * 新增暂缓流失措施
     *
     * @param clientReprieveLose 要新增的暂缓流失项
     * @return 受影响的行数
     */
    @Insert("insert into clientreprievelose values (null,#{reprieveStep},#{clientCode})")
    int insertDeferredLossItem(ClientReprieveLose clientReprieveLose);
}
